package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"os"
	"path/filepath"
	"yunwei/go_api/application/config"
	"yunwei/go_api/application/initialize"
	. "yunwei/go_api/application/utils"
)

func main() {
	// 检查文件夹是否存在
	dir, err := filepath.Abs(filepath.Dir("."))
	info, _ := os.Stat(filepath.Join(dir, "logs"))
	if info == nil {
		// 不存在文件夹则创建
		_ = os.Mkdir(filepath.Join(dir, "logs"), 0777)
	}
	if err != nil {
		fmt.Println(err)
	}

	// 配置初始化
	if err := config.Init(fmt.Sprintf("%s/config.json", dir)); err != nil {
		panic(err.Error())
	}
	// 配置调试模式
	gin.SetMode(config.Conf.Mode)

	// 日志初始化
	if err := initialize.InitLogger(config.Conf.LogConfig); err != nil {
		fmt.Printf("init logger failed, err:%v\n", err)
		return
	}
	//zap.S().Debugf("调试信息:%d", config.Conf.Port)

	// 数据库初始化
	initialize.InitDB(config.Conf.DatabaseConfig)
	// email初始化
	InitEmail(config.Conf.EmailConfig)
	//任务初始化
	initialize.InitJob()

	// 创建路由
	Router := initialize.InitRouter()

	// zap 提供了一个S函数和L函数给我们开发者使用，调用S函数或L函数，可以得到一个全局的线程安全的logger对象
	//zap.S().Infof("服务端启动...端口：%d", config.Conf.Port)

	//监听端口
	serverErr := Router.Run(fmt.Sprintf("%s:%d", config.Conf.Host, config.Conf.Port))
	if serverErr != nil {
		zap.S().Panic("服务端启动失败：", err.Error())
	}

}
